Modern research and technology have provided society with a wide variety of different devices. It is appreciated that some of these modern devices are very powerful and useful to their users. For example, some of the modern devices that fall into this category include: computers which occupy large office space down to computers which are held in one's hand, satellites which orbit around earth relaying a multitude of communication signals, global positioning system (GPS) devices capable of determining the specific locations of their users on the earth, microwave ovens capable of quickly cooking food, cellular phones which enable their users to communicate wirelessly with other people, to name a few. Additionally, it should be appreciated that some modern devices also provide entertainment to their users. For instance, some of the modern devices which fall into this category include: portable and fixed televisions which provide a wide variety of visual and audio programming to their users, video cassette recorders (VCRs) which enable their users to record television shows for later viewing and also enable them to watch (for example) prerecorded movies on a television set, portable and fixed radio receivers which provide their users music along with a wide array of different audio programming, video game consoles which challenge their users with varying situations within different virtual realities, and portable and fixed compact disc (CD) players which provide music to their users.
One of the enabling components of several of the above mentioned modern devices is a microcontroller or MCU. Specifically, the microcontroller is typically defined as a single chip (integrated circuit) that includes a processor, volatile memory such as Random Access Memory (RAM), non-volatile memory such as Read Only Memory (ROM), clocking source, and an input/output control unit. As such, the microcontroller is a computer on a chip. It should be appreciated that microcontrollers have been utilized in various applications for many years. Primarily, microcontrollers are used in control-oriented applications that are interrupt-driven, sensing and controlling external events. Microcontrollers are frequently found in a wide variety of devices and applications.
For example, microcontrollers may be found in appliances such as microwave ovens, refrigerators, televisions, VCRs, and stereos. Furthermore, microcontrollers may also be found within computer equipment such as laser printers, modems, and disk drives. Additionally, microcontrollers may be found within automobiles (e.g., engine control, diagnostics, climate control), environmental control devices (e.g., greenhouse, factory, home), aerospace, and thousands of other uses.
It should be understood that microcontrollers may be fabricated to provide particular functionality. As such, there are many different microcontrollers for many different functions. However, there is also an advanced microcontroller which includes one or more digital and/or analog programmable blocks which enable the microcontroller to be specifically programmed to perform different functions. As such, an advanced microcontroller with programmable blocks is typically able to be utilized for a wider variety of different applications than a microcontroller having a fixed functionality.
There are different ways to implement programmable blocks within a microcontroller. For example, the Field Programmable Gate Array (FPGA) has become very popular in recent years, even being utilized in several microcontroller applications. One reason for its popularity is the shortage in design cycle time that may be achieved by using programmable devices. Furthermore, FPGAs can be programmed to realize different digital functions. In particular, many FPGAs have programmable look-up tables to realize different digital functions. Usually, a FPGA contains from a few to tens of thousands of programmable logic blocks and an even greater number of flip-flops, each programmable logic block having a look-up table, multiplexers, and flip-flops. Therefore, by using programmable blocks within a microcontroller, the microcontroller may be programmed so that it can be utilized for a wide variety of different applications.
However, there are disadvantageous associated with microcontrollers that include one or more programmable analog blocks. It should be understood that a programmable analog block may be a block that contains analog circuits (e.g., switch-capacitor circuitry) and registers or latches that control the analog circuits. One disadvantage is that a microprocessor and a programmable analog block typically operate at different frequencies. As such, if data is written from the microprocessor to the programmable analog block at an inopportune time, the analog output may be corrupted. In order to ensure a proper write operation from the microprocessor to the programmable analog block, the write operation has to be properly timed to allow the analog signals in the programmable analog block to fully settle. If control data is received and stored before the analog signals have settled, the analog output from the programmable analog block may be corrupted thereby rendering it useless for most practical purposes.
One typical solution for this write operation timing problem is to utilize a dual port memory device (e.g., FIFO) wherein the microprocessor is able to write data to one of its ports at one frequency while one or more registers of the analog programmable block are able to read data from the other port at a different frequency. However, there are disadvantages associated with this dual port memory solution. For example, a dual port memory consumes too much chip space and it involves complex circuitry.